import org.junit.Test;

import java.util.Arrays;

/**
 * 数组Array
 * 数组相当于一堆相同数组类型的数据；
 *
 */
public class 数组 {
    //1.数组定义；四种，创建数组初始化【静态初始化；给定值】【动态初始化；无法定值】
    @Test
    public void testArray() {
        //注意；数据定义长度，不能改变
        int[] arr1 = new int[4];//Java推荐写法 动态初始化
        int arr2[] = new int[4];//C推荐写法Java兼容 动态初始化
        int[] arr3 = {1, 2, 3};//静态初始化数组，元素可以直接使用
        int[] arr4 = new int[]{1, 2, 3};//动态初始化
        //数组：内部存数据叫做元素
        //从arr3取出 2 的元素         数组名 下标
        System.out.println(arr3[1]);
        //从arr3的长度
        System.out.println(arr3.length);
        //从arr4获取到第四个元素值 数组下标越界异常；下标超出数组长度范围
        //System.out.println(arr4[4]);//报错 ArrayIndexOutOfBoundsException

    }

    /**
     * 数组的迭代（遍历；输出数组所有元素值）
     * 1.普通迭代方式；for
     * 2.增强for方式；推荐，jdk1.5之后
     * 3.工具类；Arrays
     */
    @Test
    public void testIterate() {
        int[] arr = {1, 2, 3, 4};//静态初始化数组   数组名[下标]

        //for(int i=0;i<arr.length;i++){//拿数组下标
        //System.out.println(arr[i]);
        // }
        //增强for jdk1.5
        for (int j : arr) { //增强for语法；（遍历数据类型 引用；数组名）
            System.out.println(j);
        }
        //工具类：Arrays.toString（）直接打印数组元素值
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 数组扩容：数组长度是固定，不可改变【可以使用扩容改数组长度】
     */
    @Test
    public void testCopy() {
        //字符数组
        char[] arr = {'唐', '山'};
        //
        char[] temp = Arrays.copyOf(arr, 4);
        arr = temp;
        arr[2] = '工';
        arr[3] = '业';
        System.out.println(arr);
        //需求；输出唐山工业

    }

    /**
     * 数组输出元素时：会有一些不同。【查看数据是否是数组】
     * 数据类型；基础数据类型+引用类型
     */
    @Test
    public void testArrays() {
        //字符数组
        char[] china = {'中', '国'};
        System.out.println(china);//输出；中国   字符串：字符数组
        //输出语句--JavaOOP面向对象：重载，字符数组自动拼接
        //数值数组
        int[] i = {1, 2};
        System.out.println(i);//输出；【数据类型@ 连接符 3d82c5f3地址值]

    }

    /**
     * 冒号排序；双层for循环使用：外层for执行一次，内层for全部执行
     */
    @Test
    public void bubbleSort() {
        //静态初始化数组
        int[] arr = {3, 6, 4, 1};  //1，3，4，6
        //1外层For
        for (int i = 0; i < arr.length; i++) {
            //2内层for控制次 j=递减-1次
            for (int j = 0; j < arr.length - 1 - i; j++) {
                //1交换：创建第三方数据，接收
                if (arr[j] > arr[j + 1]) {//【相邻元素】 数组名[下标]
                    //创建第三方数组，接收 变量\数组名：temp
                    int temp = arr[j];   //大的元素交给第三方变量保存
                    arr[j] = arr[j + 1];   //第二个元素换给第一个元素位置
                    arr[j + 1] = temp;     //保存第三方变量【大数】交给第二个元素
                }
            }
        }
        System.out.println(Arrays.toString(arr)); //输出数组【遍历数组】
    }


        //public void bubblesort (){...}

        @Test
        public void testSort () {
        int[] arr = {3, 6, 4, 1};
        //工具类 Arrays.sort()方法排序：默认升序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
    }
